package talent.repository;//import cn.iocoder.boot.kmeans.Talent;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import talent.entity.Talent;

import java.util.List;
import java.util.Optional;

// 标注这是一个 Spring Data JPA 的仓库类，用于数据访问操作
@Repository
@Transactional
public interface TalentRepository extends JpaRepository<Talent, Long> {

    // 定义一个自定义查询方法，根据多个条件筛选 Talent 对象
    // 使用 JPQL 查询语言编写查询语句
    @Query("SELECT t FROM Talent t WHERE " +
            // 如果 skillLevel 参数不为空，则要求 Talent 的 projectCount 属性大于等于 skillLevel 参数
            "(:skillLevel IS NULL OR t.projectCount >= :skillLevel) AND " +
            // 如果 experienceLevel 参数不为空，则要求 Talent 的 workExperience 属性大于等于 experienceLevel 参数
            "(:experienceLevel IS NULL OR t.workExperience >= :experienceLevel) AND " +
            // 如果 educationLevel 参数不为空，则要求 Talent 的 educationLevel 属性大于等于 educationLevel 参数
            "(:educationLevel IS NULL OR t.educationLevel >= :educationLevel)")
    // 定义查询方法，返回符合条件的 Talent 对象列表
    List<Talent> findByCriteria(
            // 使用 @Param 注解指定查询参数的名称，便于在查询语句中引用
            @Param("skillLevel") Integer skillLevel,
            @Param("experienceLevel") Integer experienceLevel,
            @Param("educationLevel") Integer educationLevel
    );

    // 新增一个方法，使用原生 SQL 查询根据 ID 获取人才详情
    @Query(value = "SELECT * FROM talent_pool WHERE id = :id", nativeQuery = true)
    Optional<Talent> findTalentById(@Param("id") Long id);

//    List<Talent> findByGrade(Integer grade);
}